package org.arquimedes.dispatcher.hilos;

import java.util.ArrayList;

/**
 * Grupo de hilos pare env�o al procesador de alarmas
 * El grupo de hilos contiene un hilo por cada sistema procesador de alarmas existente en el
 * sistema central, pueden ser N, dependiendo de la carga del sistema
 * @author Juan David Ram�rez
 * @since 3/07/2011
 *
 */
public class GrupoHilos {
	
	/**
	 * Identificador �nico para los hilos
	 */
	private int identificadorGrupoHilos;
	
	/**
	 * Ip desde donde se gener� la trama
	 */
	private String ipFuente;
	
	/**
	 * Crea un nuevo grupo de hilos con un identificador
	 * @param identificadorGrupoHilos identificador del grupo de hilos
	 * @param ipFuente Fuente desde donde se genr� la trama
	 */
	public GrupoHilos(int identificadorGrupoHilos, String ipFuente) {
		this.identificadorGrupoHilos=identificadorGrupoHilos;
		this.ipFuente=ipFuente;
	}
	
	/**
	 * Grupo de hilos para cada identificador
	 */
	private ArrayList<HiloProcesadorAlarmas> procesadores=new ArrayList<HiloProcesadorAlarmas>();
	
	/**
	 * Adiciona hilos al grupo de procesamiento
	 * @param identificador
	 * @param hiloProcesamiento
	 */
	public void adicionarHiloProcesamiento(int identificador, HiloProcesadorAlarmas hiloProcesamiento)
	{
		identificadorGrupoHilos=identificador;
		procesadores.add(hiloProcesamiento);
	}
	
	/**
	 * Retorna un hilo espec�fico.
	 * @param i �ndice del hilo buscado
	 * @return {@link HiloProcesadorAlarmas} Hilo buscado, null si no existe
	 */
	public HiloProcesadorAlarmas obtenerHilo(int i)
	{
		if(i<procesadores.size())
		{
			return procesadores.get(i);
		}
		return null;
	}
	
	/**
	 * finaliza todos los hilos del grupo
	 */
	public void finalizarTodosHilos()
	{
		for(HiloProcesadorAlarmas hilo:procesadores)
		{
			if(hilo.isAlive())
			{
				hilo.interrupt();
			}
		}
	}

	/**
	 * @return Retorna identificadorGrupoHilos
	 */
	public int getIdentificadorGrupoHilos() {
		return identificadorGrupoHilos;
	}

	/**
	 * @param Asigna el par�metro identificadorGrupoHilos en el atributo identificadorGrupoHilos
	 */
	public void setIdentificadorGrupoHilos(int identificadorGrupoHilos) {
		this.identificadorGrupoHilos = identificadorGrupoHilos;
	}

	/**
	 * @return Retorna ipFuente
	 */
	public String getIpFuente() {
		return ipFuente;
	}

	/**
	 * @param Asigna el parametro ipFuente en el atributo ipFuente
	 */
	public void setIpFuente(String ipFuente) {
		this.ipFuente = ipFuente;
	}
}
